package com.casa_apoio.estoque.mode.entity;

import com.casa_apoio.model.entity.Funcionario;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.ForeignKey;

@Entity
public class Saida implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer idSaida;    
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date data;
    private Integer quantidade;
    private Double valor;

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @ForeignKey(name = "saidaFuncionario")
    @JoinColumn(name = "idFuncionario", referencedColumnName = "idFuncionario")
    private Funcionario funcionario;

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @ForeignKey(name = "saidaProduto")
    @JoinColumn(name = "idProduto", referencedColumnName = "idProduto")
    private Produto produto;

    public Saida() {
        produto = new Produto();
        //funcionario = new Funcionario();
    }

    public Integer getIdSaida() {
        return idSaida;
    }

    public void setIdSaida(Integer idSaida) {
        this.idSaida = idSaida;
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public Integer getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(Integer quantidade) {
        this.quantidade = quantidade;
    }

    public Double getValor() {
        return valor;
    }

    public void setValor(Double valor) {
        this.valor = valor;
    }

    public Funcionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 17 * hash + (this.idSaida != null ? this.idSaida.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Saida other = (Saida) obj;
        if (this.idSaida != other.idSaida && (this.idSaida == null || !this.idSaida.equals(other.idSaida))) {
            return false;
        }
        return true;
    }
}
